package neourona;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Procesador {
	
	private static List<String> diccionario = new ArrayList<String>();
	
	public static boolean seleccionaGenObjeto(String objeto){
		for(String item : diccionario){
			if(objeto.equals(item)){
				return true;
			}
		}
		return false;
	}
	
	public static boolean seleccionarGenCosto(String costo){
		 Pattern pattern = Pattern.compile("[0-9]*");
		 Matcher matcher = pattern.matcher(costo);
		 boolean found = matcher.matches();
		 return found; 
	}
	
	public static int seleccionarCromosoma(String gen1, String gen2){
		if(seleccionarGenCosto(gen1) && seleccionaGenObjeto(gen2) ){
			return 100;
		}
		if(seleccionarGenCosto(gen2) && seleccionaGenObjeto(gen1) ){
			return 100;
		}
		if(seleccionarGenCosto(gen1) || seleccionaGenObjeto(gen2) ){
			return 50;
		}		
		if(seleccionarGenCosto(gen2) || seleccionaGenObjeto(gen1) ){
			return 50;
		}
		return 0;
	}

	public static void main(String[] args) {
		//generar poblacion
		//evaluar genes
		//seleccionar nuevos padres
		//evaluar genes y definir si se encontro el costo objeto
		diccionario.add("casaca");
		diccionario.add("combustible");
		diccionario.add("lavado");
		diccionario.add("transferencia");
		diccionario.add("jugos");
		List<Gasto> listaGasto = new ArrayList<Gasto>();
		StringBuilder stb = new StringBuilder();
		stb.append("25 en jugos en fridays pague por una casaca 300 soles, ademas gaste 40 soles en combustible y 10 soles en el lavado de mi carro finalmente realice una transferencia de 800 soles a mi papa");
		boolean followSearch = true;
		String[] poblacion = null;
		do{
			poblacion = stb.toString().split("\\s");
			//generar poblacion
			List<String> newGeneration = new ArrayList<String>();
			int i = 0;
			while( i<poblacion.length){
				String gen1 = poblacion[i];
				i++;
				String gen2 = i<=poblacion.length-1 ? poblacion[i]: "fin";
				if(gen2.equals("fin")){
					gen2="";
				}
				if(seleccionarCromosoma(gen1, gen2)==100){
					Gasto gasto = new Gasto();
					if(seleccionarGenCosto(gen1)){
						gasto.setMonto(Double.parseDouble(gen1));
						gasto.setObjeto(gen2);
					}else{
						gasto.setMonto(Double.parseDouble(gen2));
						gasto.setObjeto(gen1);
					}
					listaGasto.add(gasto);
				}else if(seleccionarCromosoma(gen1, gen2)==50){
					if(!(seleccionarGenCosto(gen1) || seleccionaGenObjeto(gen1) )){
						gen1="";
					}else{
						gen2="";
					}
					newGeneration.add((gen1+" "+gen2).trim());
				}
				i++;
			}
			stb = new StringBuilder();
			for(String cromosoma : newGeneration){
				stb.append(cromosoma +" ");
			}
			System.out.println(stb);
		}while(poblacion.length>1);
		
		for(Gasto gasto : listaGasto){
			System.out.println("Objeto:" + gasto.getObjeto() +" Monto:"+ gasto.getMonto());
		}
	}
	
	
}
